# @Time    :2025/4/6 21:04
"""
练习题 3：生成器
使用生成器表达式创建一个生成器，生成从 1 到 10 的平方数。
使用生成器函数创建一个生成器，生成斐波那契数列，直到第 10 项，
并捕获StopIteration异常，打印生成器返回的return值。
"""

#生成器表达式
generator = (x**2 for x in range(1,11))  # 创建生成器
for square in generator:
    print(square)

#生成器函数创建生成器
def fibo(n):
    a, b, counter = 0, 1, 0
    while counter < n:
        yield b
        a, b, counter = b, a + b, counter + 1
    return "done"#当生成器函数执行到 return 语句时，它会引发一个 StopIteration 异常，并且 return 的值会作为该异常的 value 属性传递


f = fibo(10)
try:
    while True:
        print(next(f))
except StopIteration as result:
    print("StopIteration1", result)
